/******************************************************
Cours: GTI310
Session: A2014
Groupe: 01
Projet: Laboratoire #2
etudiant(e)s: Fredy Alexander Bonilla et Émile Robinson
              
Professeur : Jean-François Caron
Nom du fichier: FilterFactory.java
Date cree: 2014-10-14
Date dern. modif. 2014-10-14
*******************************************************
Historique des modifications
*******************************************************
2014-10-14 Version 1.0
*******************************************************/

package gti310.tp2.audio;

import gti310.tp2.io.FileSink;
import gti310.tp2.io.FileSource;

/**
 * La classe FilterFactory va interagir avec la classe Application. Elle renvoie
 * une instance unique d'elle même contient la méthode pour constuire un filtre
 * audio de format Wav. 
 * 
 * @author Fredy Alexander Bonilla
 * @date 14-10-2014
 *
 */
public final class FilterFactory {

	/** Instance unique de la classe */
	private static volatile FilterFactory instance = null;
	
	/** Le contructeur de la classe est privée. */
	private FilterFactory() {};
	
	/**
	 * Creates a new instance of the FilterFactory class if none exist.
	 * @return The well-known instance of the Singleton class.
	 */
	public static FilterFactory getInstance(){
		if(instance == null)
			instance = new FilterFactory();
		return instance;	
	}
	
	/**
	 * Creates a new instance of WaveFilter using polymorphism from the
	 * AudioFilterInterface.
	 * 
	 * @param in
	 * @param out
	 * @return the new instance of WaveFilter
	 */
	public AudioFilter build(FileSource in, FileSink out){
		return new WaveFilter(in,out);
	}
	
}
